Pendulumaniaでは、振り子の動きを、物理法則に基づいてかなりリアルにシミュレートしています。
必要ないという人がほとんどでしょうけど、ときどき質問があるので、Pendulumaniaの中で使われている物理定数・原理などを書いておきます。定数はテストプレイ中に、最適なゲームバランスになるようにいろいろ調整したので、切りの悪い数字ですが許してください(^^;
これを読むことでPendulumaniaの得点がアップすることは、まずないと思いますので、気になる人向けです。
※2000年現在、下で説明していることは全て高校力学(一部中学)の範囲内です。
説明の都合上、長さの単位はpixel、時間の単位はtick(=0.025秒)、質量の単位はkgとします。
振り子の物理的シミュレートは、40分の1秒(=1tick)単位で行っています。
まず、重力とゴムからの力によって、ボールに加わる加速度を計算します。
ボールの加速度 = 重力加速度定数 + ゴムからの力による加速度
ゴムからの力による加速度は、ゴムの伸び x ゴムの弾性定数 ÷ ボールの質量で求まります。
1tickは十分短いので、この間ボールの加速度は一定であると近似して、次にボールの速度を算出します。
ボールの速度 = 前の瞬間のボールの速度[pixel/tick] + 加速度[pixel/tick2] X 1[tick]
今度は、1tickは十分短いので、この間ボールの速度は一定であると近似して、ボールの位置を算出します。
ボールの位置 = 前の瞬間のボールの位置 + ボールの速度 X 1
壁に衝突したときの計算は、これとは別に行っています。なお、加速度・速度・位置は全てベクトル量(x方向とy方向がある)です。計算上は水平方向と垂直方向を独立にやればOKです。
※速度と位置を求めるところで出てくる、X1ですが、1tickごとの計算なので1になります。「移動距離=速度X時間」ですが、速度の単位が「1tickごとの移動距離」になるように取ってあるので、X1となり、計算が楽になります(実質、ただの足し算になる)。速度の方も一緒です。
Pendulumaniaでは、ゲーム中のリアルな振り子の動きを、基本的には物理法則に厳密に基づいて再現しています。が、一部近似計算も行っていますので、以下の点に注意してください。
さて、ここまで説明を読んだ人なら、これらの物理定数をいじったら、ボールがどんな動きをするのか、気になることでしょう。というわけで、Pendulumaniaでは、今まで説明した物理定数のうちいくつかを、実験的に変更してみる機能があります。
ただし、変更することによってゲームのバランスが崩れてしまいますので、これらを変更した状態では、「ゲームの録画」「ゲームの再生」「ハイスコアの記録」は一切行えません。また、結果表示画面でも、ランクは表示されません。というわけで、既にゲームではなくなってしまいますので、試して満足したら、さっさと元に戻してください(^^;
では、変更の方法を説明します。
PMania.iniという設定ファイル(歯車のアイコンが付いているものです)をメモ帳で開いてください。下のような個所があると思います。
[ConstantSetting]
Gravity=1
CollisionConstant=1
NaturalLength=1
RubberConstant=1
BallMass=1
下の5行の行末にある、5つの「1」の数字を変更することで、ゲーム中の物理定数を実数倍することができます。(数字は半角文字で入力しましょう)
例えば、重力を2倍にしたらどうなるだろう、と思った場合は、Gravity=2としてこのPMania.iniファイルを保存して、ゲームを起動してみましょう。重力2倍の状況でゲームがプレイできます。(点数は記録されません) 他も全部同様です。
ただし、あんまり大きい数字(10とか100とか)は絶対に入力しないでください。プログラムがエラーを起こしたり、変な動きをするようになっても知りません。また、あまり通常の設定から離れた場合には正しいシミュレートは行えません。妙な設定にしてゲームが終わらなくなったら、ESCキーを押してみてください。
Gravity以外は、マイナスの値も指定しないでください。(指定してあったら自動的にその数字の絶対値を使用します)
これによって物理定数を変更できますが、「ボールのスピードは一定以上に上がらない仕様にしてある」ので、その点は注意してくださいね。例えどんなに軽いボールや強力なゴムを作っても、スピードはある程度以上には上がりません。